Sequential Search & Binary Search

순차 탐색(Sequential Search)
특정원소를 찾기 위해 원소를 순차적으로 하나씩 탐색하는 방법
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LENGTH 100
char **array;
int founded;
int main(void){
int n;
char *word;
word=malloc(sizeof(char *100));
scanf("%d %s", &n, word);
array=(char**)malloc(sizeof(char*)*n);
for(int i=0;i<n;i++){
array[i]=malloc(sizeof(char)*LENGTH);
scanf("%s", array[i]);
}
for(int i=0;i<n;i++){
if(!strcmp(array[i], word)){
printf("%d .\n", i+1);
founded=1;
}
}
if(!founded)printf(" .");
system("pause");
return 0;
}
순차 탐색은 데이터 정렬 유무에 상관 없이 가장 앞에 있는 원소부터 하나씩 확인해야 한다는 점에서 O(N)의 시간 복잡도를 가진다.
이진 탐색(Binary Search)
배열 내부 데이터가 이미 정렬 되어 있는 상황에서 사용 가능한 알고리즘. 탐색 범위를 절반씩 좁혀가며 데이터를 탐색
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 100000
int a[MAX_SIZE];
int founded=0;
int search(int start, int end, int target){
if(start>end)return -9999;
int mid=(strat+end)/2;
if(a[mid]==target)return mid;
else if(a[mid]>target)return search(start,mid-1, target);
else return search(mid+1, end, target);
}
//
int main(Void){
int n, target;
scaf("%d %d", &n, &target);
for(int i=0;i<n;i+)scanf("%d",&a[i]);
int result=search(0, n-1, target);
if(result!=-9999)printf("%d .\n",result+1);
else printf(" .\n");
system("pause");
return 0;
}
이진탐색은 한 번 확인할 때마다 보아야 하는 원소의 개수가 절반씩 줄어든다는 점에서 O(logN)의 시간 복잡도를 가진다